package cn.zwx.common.captcha.config;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.ShearCaptcha;
import cn.zwx.common.captcha.enums.BackgroundType;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

import javax.annotation.Resource;
import java.awt.*;

/**
 * 验证码配置
 *
 * @author zhangwenxue
 */
@Configuration
@EnableConfigurationProperties({CaptchaProperties.class})
public class CaptchaConfig {

    private static final Font FONT = new Font("Arial", Font.BOLD, 48);
    @Resource
    private CaptchaProperties captchaProperties;
    /**
     * 圆圈干扰验证码
     */
    @Lazy
    @Bean
    public CircleCaptcha circleCaptcha() {
        CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(captchaProperties.getWidth(),captchaProperties.getHeight());
        final BackgroundType backgroundType = BackgroundType.ofValue(captchaProperties.getBackground());
        captcha.setBackground(backgroundType.getClazz());
        captcha.setFont(FONT);
        return captcha;
    }

    /**
     * 线段干扰的验证码
     */
    @Lazy
    @Bean
    public LineCaptcha lineCaptcha() {
        LineCaptcha captcha = CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(),captchaProperties.getHeight());
        final BackgroundType backgroundType = BackgroundType.ofValue(captchaProperties.getBackground());
        captcha.setBackground(backgroundType.getClazz());
        captcha.setFont(FONT);
        return captcha;
    }

    /**
     * 扭曲干扰验证码
     */
    @Lazy
    @Bean
    public ShearCaptcha shearCaptcha() {
        ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(captchaProperties.getWidth(),captchaProperties.getHeight());
        final BackgroundType backgroundType = BackgroundType.ofValue(captchaProperties.getBackground());
        captcha.setBackground(backgroundType.getClazz());
        captcha.setFont(FONT);
        return captcha;
    }

}
